こんにちわ、Mr.Xです。
とりあえずvuls自体の環境は整った。(第一回の記事参照)
次のステップは、vulsの結果を Azure Storage (BLOB) に格納する、ということだ。
vulsにはそもそも -report-s3 というオプションがあり、これに加えてAWSの各種設定値をセットして実行すれば、シームレスに連携ができるようになっている。
しかし、BLOBストレージにそれが転用できるというわけではない。ではどうするか。
基本的な手段の想像
OSSなんだから、コード書いてsend-prするのが筋かもしれないが、私ごときでは時間もかかりすぎるので、Work Aroundな方法でまずは行きたい。
vuls には -report-json というオプションがある。これで出力されたJSONをAzure CLIにパイプで渡し、Azure CLIからコンテナにputする、という方法を考えた。
Functionsはこのputをtriggerにして起動するようにするのだけど、今回はまず転送だけで終わる。次回予告からではどっちもやる勢いだったけど、すまん、今はこれが精いっぱい。
準備
[確認] -report-jsonではどのような出力か。
こんなんでした。一部抜粋。実際はかなり長い。
[導入] AzureCLI
epelリポジトリを利用できるようにして、node.js, npmをインストールして、npm経由でのインストールが最も楽。
参考: [Qiita] centos + node.js + npm + nvm インストール
参考: [公式] Azure CLI のインストール
[確認] そもそもパイプで渡せる?
結論から言うと無理。
-report-json オプションは標準出力にも吐き出すし、別にファイルも作る。しかし、標準出力の部分には別に要らない部分もある。もうひとつ、Azure CLIのコマンドではファイルを指定するのだが、いわゆる標準入力を意味する”-“を解釈してくれない。結局出力されたファイルを指定して送ることになりそうだ。
どうせcronとかで自動的に処理するので、vulsのあとにCLIを実行する、ちょっとしたスクリプトを書けば済むことだ。
やってみた。
まずvulsの実行から、jsonファイルを転送するところまでのスクリプトを書いた。
#!/usr/bin/bash #Vars VULS="/home/azureuser/go/bin/vuls" VULS_OPTIONS="scan -lang=ja -ignore-unscored-cves -report-json" VULS_JSON="/home/azureuser/results/current/vuls-target.json" AZURE_STORAGE_CONTAINER="コンテナ名が書いてある" AZURE_STORAGE_ACCOUNT="ストレージアカウントが書いてある" AZURE_STORAGE_ACCESS_KEY="KEYが書いてある" AZURE_CLI="/usr/bin/azure" AZURE_CLI_OPTIONS="storage blob upload --container $AZURE_STORAGE_CONTAINER -f $VULS_JSON -b 0000.json" #Logic $VULS $VULS_OPTIONS export AZURE_STORAGE_ACCOUNT=$AZURE_STORAGE_ACCOUNT export AZURE_STORAGE_ACCESS_KEY=$AZURE_STORAGE_ACCESS_KEY $AZURE_CLI $AZURE_CLI_OPTIONS
大変雑なスクリプトだが無事に機能した。オプションの意味等はドキュメントを見てほしい。
なお、”VULS_JSON”のファイル名は、config.tomlで設定したターゲットサーバー名がそのまま利用されるので、もしこのスクリプトを試す人は、まずvulsを使ってから確認してほしい。複数の場合どうなるかはまだ試していないので要注意。ひょっとするとglobを利用する必要があるかもしれない。
今回はちょっとした試験なので、作られるblob名は0000.jsonにしてあるけども、自動化を踏まえると、タイムスタンプなどを利用した方がいいかな。
また、cronで自動化する際には、出力の抑制目的のログ取得など、工夫すべき点は多くある。
次回はいよいよ、このblobへのputをトリガとして、Azure Functions(Preview)を動かすことに挑戦する。